package ar.uba.fi.algo3.algoTank.Objetos;

import ar.uba.fi.algo3.algoTank.Interfaces.Interactuable;
import ar.uba.fi.algo3.algoTank.Objetos.Tanques.AlgoTank;
import ar.uba.fi.algo3.algoTank.Objetos.Tanques.Tanque;

public abstract class Proyectil extends ObjetoMovil implements Interactuable {

	private static final long serialVersionUID = 1L;
	
	protected float danio;
	protected Tanque duenio;
	
	public Proyectil() {
		super();
		this.movimiento.setVelocidad(10);
		this.ubicacion.setAlto(5);
		this.ubicacion.setAncho(5);
	}
	
	public Proyectil(Posicion posicion,Territorio territorio) {
		super(posicion,territorio);
		this.movimiento.setVelocidad(10);
		this.ubicacion.setAlto(5);
		this.ubicacion.setAncho(5);
	}
	
	public void setDuenio(Tanque duenio) {
		this.duenio = duenio;
	}
	
	public Tanque getDuenio() {
		return this.duenio;
	}
	
	public void setDanio(float danioProyectil){
		this.danio = danioProyectil;
	}
	
	public float getDanio(){
		return this.danio;
	}
	
	public void vivir(){				
		//realiza el movimiento
		this.mover();
		
		if (territorio.fueraDelTerritorio(ubicacion))
			this.morir();				
	}
	
	public void mover(){
		this.calcularProximaUbicacion();

		this.ubicacion = proximaUbicacion;
	}
	
	public boolean esInteractuable() {
		return true;
	}
	
	public boolean interactuableConAlgoTank(){
		return true;
	}
	
	
	public boolean interactua(Objeto obj){
		return obj.colisiona(this);
	}
	
	public void interactuar(Objeto obj){
		obj.interactuarConProyectil(this);
	}
	
	
	public void interactuarConAlgoTank(AlgoTank algoTank){
		algoTank.daniarse(this.getDanio());
		this.morir();
	}
	
	public void interactuarConProyectil(Proyectil proyectil){
		//dos proyectiles se destruyen al interactuar
		proyectil.morir();
		this.morir();
	}

}
